코딩테스트 연습 - 약수의 개수와 덧셈 | 프로그래머스 스쿨
[ 템플릿 코드 ]
#include <string>
#include <vector>
using namespace std;
int solution(int left, int right) {
int answer = 0;
return answer;
}[ 풀이 ]
int solution(int left, int right)
{
int answer = 0;
for (int i = left; i <= right; i++)
{
int count = 0;
for (int j = 1; j <= i; j++)
{
if (i % j == 0)
{
count++;
}
}
if (count % 2 == 0)
{
answer += i;
}
else
{
answer -= i;
}
}
return answer;
}[ 해설 ]
int solution(int left, int right)
{
// 최종 결과를 저장할 변수
int answer = 0;
// left부터 right까지 모든 숫자를 하나씩 확인
for (int i = left; i <= right; i++)
{
// 현재 숫자(i)의 약수 개수를 저장할 변수
int count = 0;
// 1부터 i까지 반복하면서 약수를 찾음
for (int j = 1; j <= i; j++)
{
// i를 j로 나누었을 때 나머지가 0이면
// j는 i의 약수
if (i % j == 0)
{
// 약수 개수 1 증가
count++;
}
}
// 약수의 개수가 짝수라면
if (count % 2 == 0)
{
// 현재 숫자를 결과에 더함
answer += i;
}
// 약수의 개수가 홀수라면
else
{
// 현재 숫자를 결과에서 뺌
answer -= i;
}
}
// 최종 계산 결과 반환
return answer;
}[ 타 답안 ]
#include <cmath> // sqrt() 함수를 사용하기 위해 포함
int solution(int left, int right)
{
// 최종 결과를 저장할 변수
int answer = 0;
// left부터 right까지 모든 숫자를 하나씩 확인
for (int i = left; i <= right; i++)
{
// sqrt(i)는 i의 제곱근을 구함
// (int)sqrt(i)는 제곱근의 소수 부분을 버림
// 만약 제곱근이 정수라면
// 예)
// sqrt(16) = 4
// (int)sqrt(16) = 4
// 값이 같으므로 조건 참
// sqrt(15) = 3.87298...
// (int)sqrt(15) = 3
// 값이 다르므로 조건 거짓
if (sqrt(i) == (int)sqrt(i))
{
// 완전제곱수인 경우
// 약수의 개수가 홀수이므로 빼기
answer -= i;
}
else
{
// 완전제곱수가 아닌 경우
// 약수의 개수가 짝수이므로 더하기
answer += i;
}
}
// 최종 결과 반환
return answer;
}